<?php
class ImageResizer {
	/**
	 * Превращает текст в картинку
	 * @param string $src путь то текста
	 * @param number $lifeTime жизнь файла
	 * @param string $params параметры phpthumb
	 * @param string $tag тег папки
	 * @param boolean $isOrig оригинал картинки ?
	 * @return string|boolean путь до картинки
	 */
	public static function resizeImage ($src, $size=array(), $lifeTime = 2592000, $params = "", $tag = false, $isOrig = false) {
		if (!$lifeTime) $lifeTime = 2592000;
		if (($isOrig && file_exists($src)) || (file_exists(Yii::getPathOfAlias('webroot').$src) && is_file(Yii::getPathOfAlias('webroot').$src)) ) {
		
			require_once(Yii::getPathOfAlias('webroot')."/protected/extensions/phpThumb/phpthumb.class.php"); // Подключаем и иннициализируем phpThumb
			$phpThumb = new phpThumb();
			$phpThumb->src = $src;
			$ext = end(explode(".", $src)); // Расширение файла картинки
			switch ($ext) {
				case "jpg": $phpThumb->f = "jpeg"; break;
				case "gif": $phpThumb->f = "gif"; break;
				case "png": $phpThumb->f = "png"; break;
				default: $phpThumb->f = "jpeg"; break;
			}
		
			$base_name = basename($src, ".".$ext); // Основное имя файла
			if (isset($size['w']))
				$phpThumb->w = $size['w'];
			if (isset($size['h']))
				$phpThumb->h = $size['h'];
			$phpThumb->q = 90;
			$phpThumb->bg = "#ffffff";
			$phpThumb->far = true;
			$phpThumb->aoe = false;
		
			//масштабируем ватермарк
			/*if (isset($params['wmPercent']) && $params['wmPercent']>0 && is_array($params['fltr'])) {
				$par = explode('|',$params['fltr'][0]);
				//$widthSRC = isset($size['w']) ? $size['w'] : 1000;
				if ($par !== false) {
					if(empty($widthSRC))
						list($widthSRC, $heightSRC) = getimagesize(Yii::getPathOfAlias('webroot').$src);
		
					if (!empty($widthSRC)) {
						$srcWM = $par[1];
						$newWWm = intval($widthSRC*($params['wmPercent']/100));
						$newWWm = round($newWWm,(0-strlen($newWWm)+1));
		
						list($widthWM, $heightWM) = getimagesize(Yii::getPathOfAlias('webroot').$srcWM);
						
						//проверяю, если размеры нового ВМ больше размером ориг ВМ, то не ресайзю
						if($newWWm < $widthWM)
						{                                // вкл. увеличение изображения
							$newWmsrc = resizeimage ($srcWM, array('w'=> $newWWm));
							//   echo '<pre>'.print_r(intval($widthSRC*($params['wmPercent']/100)),1).'</pre>';
							// echo '<pre>'.print_r($newWmsrc,1).'</pre>';
							if($newWmsrc!==false)
							{      //    echo $newWmsrc.'<br/>';
								$par[1] = $newWmsrc;
								$params['fltr'][0] = implode('|',$par);
							}
						}
					}
				}
			}*/
		
			if (is_array($params)) {
				foreach ($params as $param=>$value) {
					$phpThumb->$param = $value;
				}
				$code = $phpThumb->w.'_'.substr(md5(serialize(array($params,$size))), 8, 16); // сократим суффикс с параметрами до 16 символов
			} else {
				$code = $phpThumb->w;
			}
		
			if (!$isOrig) {
				$codeSrc = substr(md5_file(Yii::getPathOfAlias('webroot').$src),0,5);
				$dirname = dirname($src);
				if ($tag) {
					$dirname = str_ireplace($tag, $tag.'_thumb', $dirname);
				
					if(!is_dir(Yii::getPathOfAlias('webroot').$dirname))
				  		mkdir(Yii::getPathOfAlias('webroot').$dirname);
	
				}
				if(strlen($dirname) > 1)
				{
					$target_file = Yii::getPathOfAlias('webroot').$dirname."/".$base_name."_thumb_".$code.'-'.$codeSrc.".".$ext;
				}
				else
				{
					$target_file = Yii::getPathOfAlias('webroot')."/".$base_name."_thumb_".$code.'-'.$codeSrc.".".$ext;
					$dirname='';
				}
			} else {
				$target_file = $src;
			}
			
			// удаляем старые файлы
			/*if ($objs = glob(Yii::getPathOfAlias('webroot').$dirname."/".$base_name."_thumb_".$code.'-'.'*.{jpg,png,gif}', GLOB_BRACE))
			{
				foreach($objs as $obj)
				{
					if(is_file($obj) && $obj!=$target_file)
					{
						@unlink($obj);
					}
				}
			}*/
		
		
			$target_file = str_replace('\\','/',$target_file);
		
			//выключение кеша ))
			//       @unlink($target_file);
			if(!$isOrig && file_exists($target_file) AND filesize($target_file) > 0)
			{  /*
				if (filemtime($target_file)+$lifeTime < time() /*|| ($USER->IsAdmin() && $_GET['clear_cache']=='Y')*//*) { // Файл есть, но старый
				$phpThumb->GenerateThumbnail();
				$success = $phpThumb->RenderToFile($target_file);
				} else { */// Файл есть, новый, не генерируем
				$success = true;
				/*} */
			} else { // Файла нет, генерируем
				if (file_exists($target_file) AND filesize($target_file)==0) @unlink($target_file); // удаление файла нулевой длины
				$phpThumb->GenerateThumbnail();
				$success = $phpThumb->RenderToFile($target_file);
			}
			//print_r(array($success)); die("asd");
			if ($success) return substr($target_file, strlen(Yii::getPathOfAlias('webroot'))); else return false;
		} else {
			//die("qwe");
			return false;
		}
	}
	
	/**
	 * Превращает текст в картинку
	 * @param string $src путь то текста
	 * @param number $lifeTime жизнь файла
	 * @param string $params параметры phpthumb
	 * @param string $tag тег папки
	 * @return string|boolean путь до картинки
	 */
	public static function getTextImage ($src, $lifeTime = 2592000, $params = "", $tag = 'phone') {
		if (!$lifeTime) $lifeTime = 2592000;
		
		if (file_exists(Yii::getPathOfAlias('webroot').$src) && is_file(Yii::getPathOfAlias('webroot').$src)) {
			require_once(Yii::getPathOfAlias('webroot')."/protected/extensions/phpThumb/phpthumb.class.php"); // Подключаем и иннициализируем phpThumb	
			$phpThumb = new phpThumb();
			$phpThumb->src = $src;
			$ext = end(explode(".", $src)); // Расширение файла картинки
			
			switch ($ext) {
				case "jpg": $phpThumb->f = "jpeg"; break;
				case "gif": $phpThumb->f = "gif"; break;
				case "png": $phpThumb->f = "png"; break;
				default: $phpThumb->f = "jpeg"; break;
			}
	
			$base_name = basename($src, ".".$ext); // Основное имя файла
	
			if (is_array($params)) {
				foreach ($params as $param=>$value) {
					$phpThumb->$param = $value;
				}
				$code = $phpThumb->w.'_'.substr(md5(serialize(array($params))), 8, 16); // сократим суффикс с параметрами до 16 символов
			} else {
				$code = $phpThumb->w;
			}
	
			$codeSrc = substr(md5_file(Yii::getPathOfAlias('webroot').$src),0,5);
	
			$dirname = '/uploads/'.$tag;
			if (strlen($dirname) > 1) {
				$target_file = Yii::getPathOfAlias('webroot').$dirname."/".$base_name.$code.$codeSrc.".".$ext;
			} else {
				$target_file = Yii::getPathOfAlias('webroot')."/".$base_name.$code.$codeSrc.".".$ext;
				$dirname='';
			}
			
			// удаляем старые файлы
			/*if ($objs = glob(Yii::getPathOfAlias('webroot').$dirname."/".$base_name."_thumb_".$code.'-'.'*.{jpg,png,gif}', GLOB_BRACE)){
				foreach($objs as $obj){
					if(is_file($obj) && $obj!=$target_file){
						@unlink($obj);
					}
				}
			}*/
			$target_file = str_replace('\\','/',$target_file);
	
			// выключение кеша ))
			// @unlink($target_file);
			if (file_exists($target_file) && filesize($target_file) > 0) {  /*
				if (filemtime($target_file)+$lifeTime < time() /*|| ($USER->IsAdmin() && $_GET['clear_cache']=='Y')*//*) { // Файл есть, но старый
				$phpThumb->GenerateThumbnail();
				$success = $phpThumb->RenderToFile($target_file);
				} else { */// Файл есть, новый, не генерируем
				$success = true;
				/*} */
			} // Файла нет, генерируем
			else { 
				if (file_exists($target_file) AND filesize($target_file)==0) @unlink($target_file); // удаление файла нулевой длины
				$phpThumb->GenerateThumbnail();
				$success = $phpThumb->RenderToFile($target_file);
			}

			if ($success) 
				return substr($target_file, strlen(Yii::getPathOfAlias('webroot'))); 
			else 
				return false;
		} else {
			return false;
		}
	}
	
	/**
	 * Создает файл с картинкой телефона
	 * @param string $phone телефон (текст)
	 * @return boolean|Ambigous <boolean, string> путь до картинки фото
	 */
	public static function getPhoneImgSrc ($phone = false) {
		if (!$phone) return false;
		
		$Params['fltr'] = array("wmt|".$phone."|11|TL|333|/fonts/PT_Sans-Web-Regular.ttf|0|0|0|0|0|");
		$src = '/images/white_bg.jpg';
		$srcSmall = self::getTextImage($src, 0, $Params);
		
		return $srcSmall;
	}
	
	/**
	 * Функция используется для вырезания области с маркерами сайта
	 * @param string $path путь до файла
	 * @param array $params array('w'=> ширина, 'h'=> высота)
	 * @return boolean обрезал ли фотку?
	 */
	public static function cutImage ($path, $params = array()) {
		$arr = getimagesize($path);
		
		$w = $arr[0];
		if (isset($params['w'])) $w -= $params['w'];
		
		$h = $arr[1];
		if (isset($params['h'])) $h -= $params['h'];
		
		$src = ImageResizer::resizeImage($path, array('w'=>$w, 'h'=>$h), 0, array('zc'=>1), false, true);	
		
		return empty($src);
	}
	
	public static function getWithwaterMark ($src, $size=array(), $lifeTime = 2592000, $params = "", $tag = false, $align = 'right') {
		$srcBig = self::resizeImage($src, $size, $lifeTime, $params, $tag);
		
		list($width, $height) = getimagesize(Yii::getPathOfAlias('webroot').$srcBig);
		
		$params['wmPercent'] = 30;
		$paramsWatermark = array(		
			0 => 'wmi',
			1 => '/images/watermark.png',
			2 => 'BL',
			3 => '100',	
		);
		
		list($widthWM, $heightWM) = getimagesize(Yii::getPathOfAlias('webroot').$paramsWatermark[1]);
		
		if ($align == 'right') {
			$paramsWatermark[4] = $width - $widthWM;
			$paramsWatermark[5] = $heightWM-12;
		} elseif ($align == 'center') {
			$paramsWatermark[4] = ($width - $widthWM)/2;
			$paramsWatermark[5] = ($height - $heightWM)/2;
		}
		$params = array();
		$params['fltr'] = array(implode('|', $paramsWatermark));
		
		$srcBigWatermark = self::resizeImage($src, $size, $lifeTime, $params, 'catalog');
		
		unlink(Yii::getPathOfAlias('webroot').$srcBig);
		
		return $srcBigWatermark;		
	}
}